我們先來看題目,知道紅色軸和 input 有關,藍色軸的 output 和 flag 有關,而藍色軸又受紅色軸影響,所以我們將針對齒輪傳動的機械結構進行分析,最終根據輸入數據計算出隱藏的 flag。
hint 1:Rotating the axle that number of times is obviously not feasible. Can you model the mathematical relationship between red and blue?
下載題目所給,並且用 ls
查看,我們得到一個 input.txt 和 Virtual-Machine-0.zip 。
$ ls
input.txt Virtual-Machine-0.zip
解壓縮 Virtual-Machine-0.zip,得到一個 .dae檔。
$ unzip Virtual-Machine-0.zip
Archive: Virtual-Machine-0.zip
inflating: Virtual-Machine-0.dae
.dae 檔是代表數位資產交換 (digital asset exchange),可以儲存各種內容,包含影像、紋理和 3D 模型,這個檔案是由 XML COLLADA format 組成。
我們可以使用 Adobe Photoshop、Daz Studio、SketchUp 和 Blender 等應用程式檢視 COLLADA 檔案,在這裡我們選擇使用免費的軟體 blender 開啟。
將 .dae檔 import 到 blender,會得到下圖。
拆開黑色盒子後,可以看到紅色的齒輪和藍色的齒輪由一個灰色齒輪連接。而紅色齒輪總共有 40 個邊,灰色有 8 個,代表轉動紅色齒輪一圈,藍色齒輪會轉動 5 圈。
因為紅色齒輪是 input,藍色齒輪是 output,所以能夠得到簡單的數學式: output = input * 5。
這裡我們輸入 python3
,直接在 Ubuntu 的終端機中使用 python,先計算出 output 值後,再使用內置函式 hex()
來處理二進位和 16 進位的轉換。
$ python3
Python 3.6.9 (default, Mar 10 2023, 16:46:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 39722847074734820757600524178581224432297292490103996089444214757432940313 *5
198614235373674103788002620892906122161486462450519980447221073787164701565
>>> hex(198614235373674103788002620892906122161486462450519980447221073787164701565)
'0x7069636f4354467b67333472355f30665f6d3072335f64303563366436337d'
>>> exit()
最後,再將 16 進位轉成 ascii code, 就可以得到答案啦!
底下的指令意思是,將 output 值印出,並且使用 xxd
去做 16 進位和 ascii 的轉換。
$ echo "7069636f4354467b67333472355f30665f6d3072335f64303563366436337d" | xxd -r -p
picoCTF{g34r5_0f_m0r3_d05c6d63}
在 xxd -r -p
這個指令中,xxd
用來生成十六進位的表示,或將十六進位數字轉回原始的二進位格式。-r
:這個參數告訴 xxd
反轉其操作,簡單來說就是從十六進位數字轉回原始格式。-p
:這個參數告訴 xxd
以純十六進位數字格式進行處理。
詳細的使用方法可以查看:xxd(1) - Linux man page,或是在 command line 中使用 xxd -h
查看。
小結:
知道 .dae 檔是甚麼以及怎麼使用,還有 xxd
指令如何使用。